iT邦幫忙

2024 iThome 鐵人賽

DAY 5
0
佛心分享-SideProject30

從0開始—初階程式語言學習者的必經之路系列 第 5

DAY5 遊戲越來越困難!怎麼使用迴圈讓敵人越來越多?

  • 分享至 

  • xImage
  •  

day3,4使用了隨機生成與continue 語句製作了關卡,今天就來用反向語句增加難度吧!

目錄:
1.反向迴圈實例
2.遊戲設計

反向迴圈(Reverse Loop)是指從結束條件開始,逐步向開始條件進行迭代的迴圈結構。

以下是一些使用反向迴圈的例子:

例子一:倒序遍歷數組

使用反向for迴圈來倒序遍歷數組元素:

public class ReverseLoop {
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5};

    for (int i = array.length - 1; i >= 0; i--) {
        System.out.println("Element at index " + i + ": " + array[i]);
    }
}

}

在這個例子中,迴圈從array.length - 1(即數組的最後一個索引)開始,逐步遞減到索引0。

例子二:反向處理字符串

如果想要倒序處理字符串中的每個字符,可以使用反向迴圈:

public class ReverseLoop {
public static void main(String[] args) {
String str = "Hello, World!";

    for (int i = str.length() - 1; i >= 0; i--) {
        System.out.print(str.charAt(i));
    }
}

}

這個迴圈從字符串的最後一個字符開始,逐個向前輸出字符,最終實現字符串的反向輸出。

例子三:反向計數

有時需要進行反向計數,這可以通過反向for迴圈來實現:

public class ReverseLoop {
public static void main(String[] args) {
for (int i = 10; i >= 1; i--) {
System.out.println("Count: " + i);
}
}
}

這個例子從10開始計數,逐步遞減到1。

反向迴圈在處理需要倒序的情況時非常有用,使用起來也很簡單,只需調整迴圈的初始條件、結束條件和遞減方式即可。

2.遊戲設計:

import java.util.Random;

public class ChallengingMaze {
private final int width;
private final int height;
private char[][] maze;
private final Random random = new Random();
private int score;

public ChallengingMaze(int width, int height) {
    this.width = width;
    this.height = height;
    this.score = 0;
}

private void generateMaze(int level) {
    maze = new char[width][height];
    for (int x = 0; x < width; x++) {
        for (int y = 0; y < height; y++) {
            maze[x][y] = '#'; // 用#表示牆壁
        }
    }

    // 設置空白路徑
    for (int x = 1; x < width - 1; x++) {
        for (int y = 1; y < height - 1; y++) {
            maze[x][y] = ' ';
        }
    }

    // 添加敵人和陷阱
    int enemies = level;
    int traps = level;
    int treasures = level;
    for (int i = width - 2; i >= 1; i--) {
        for (int j = height - 2; j >= 1; j--) {
            if (random.nextInt(100) < 5 && enemies > 0) {
                maze[i][j] = 'E'; // E表示敵人
                enemies--;
            } else if (random.nextInt(100) < 5 && traps > 0) {
                maze[i][j] = 'T'; // T表示陷阱
                traps--;
            } else if (random.nextInt(100) < 5 && treasures > 0) {
                maze[i][j] = 'C'; // C表示寶藏
                treasures--;
            }
        }
    }
}

public void printMaze() {
    for (int y = 0; y < height; y++) {
        for (int x = 0; x < width; x++) {
            System.out.print(maze[x][y] + " ");
        }
        System.out.println();
    }
}

public void moveCharacter(int startX, int startY) {
    int x = startX;
    int y = startY;

    while (true) {
        if (maze[x][y] == 'T') {
            score -= 10;
            System.out.println("踩到陷阱,扣10分");
        } else if (maze[x][y] == 'C') {
            score += 10;
            System.out.println("找到寶藏,加10分");
        } else if (maze[x][y] == 'E') {
            score -= 20;
            System.out.println("遇到敵人,扣20分");
        }

        maze[x][y] = ' '; // 清除標記

        // 隨機移動到下一個位置
        int[] directions = {0, 1, 0, -1, 1, 0, -1, 0}; // 上、右、下、左
        int dirIndex = random.nextInt(4) * 2;
        x += directions[dirIndex];
        y += directions[dirIndex + 1];

        if (x < 0 || x >= width || y < 0 || y >= height || maze[x][y] == '#') {
            break; // 碰到牆壁或邊界時停止移動
        }
    }
}

public int getScore() {
    return score;
}

public static void main(String[] args) {
    ChallengingMaze maze = new ChallengingMaze(21, 21);
    
    // 遊戲分多個關卡,每個關卡難度逐漸增加
    for (int level = 1; level <= 5; level++) {
        System.out.println("關卡 " + level);
        maze.generateMaze(level);
        maze.printMaze();
        maze.moveCharacter(10, 10);
        System.out.println("關卡 " + level + " 的得分: " + maze.getScore());
        System.out.println();
    }

    System.out.println("最終得分: " + maze.getScore());
}

}

以上遊戲跟前兩天的內容較不貫通,往後增加修改加美編,就可以這週的遊戲挑戰啦~


上一篇
DAY4 少不了的關卡!用迴圈語法增加障礙
下一篇
DAY6怎麼讓畫面變好看?創造圖形化界面!
系列文
從0開始—初階程式語言學習者的必經之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言